#ifndef BSW_ADC_H_
#define BSW_ADC_H_



#define ADC_RESOLUTION        12U        /* Number of A/D converter bits */
#define ADC_INSTANCE           0U        /* ADC0 */
#define ADC_CHANNEL            0U



typedef struct 
{ /*系统时钟112M 预分频128  */
	ADC_Type*                 	Adc_base;   		 		  		/* PCC 基地址指针                 		eg:ADC0                   		*/
	clock_names_t             	clockName;		 				    /* 外围时钟                       			eg:PCC_ADC0_CLOCK         		*/
	IRQn_Type					Adc_IRQn;
	uint32_t                  	u32_ClkSoc;		 		  			/*  时钟源                        			eg:6                      		*/
	uint8_t                   	u8_ChIndex;             			/* ADC测量通道              			eg:0                    		*/
	SIM_Type*					Sim_baseAddr;						/* ADC基地指针                    		eg:SIM                    		*/
	adc_inputchannel_t        	InputCh;   		 					/* 为测量通道选择输入通道         		eg:ADC_INPUTCHAN_EXT8     		*/
	bool						Irq_En;								/* ADC中断配置				eg:true							*/
	uint32_t                  	u32_instance;		 				/* ADC实例                        			eg:0                      		*/
	uint8_t                  	SIM_Ch_Select;            			/* SIM 模块 用来引脚ADC通道复用   eg:0x01           				*/
	adc_clk_divide_t          	clockDivide ;    		 			/* 时钟分频器                    			eg:ADC_CLK_DIVIDE_1       		*/
	adc_resolution_t          	resolution ;      		 			/* ADC分辨率模式                  		eg:ADC_RESOLUTION_12BIT   		*/
	adc_input_clock_t         	inputClock;               			/* 新的输入时钟源                		eg:ADC_CLK_ALT_1          		*/
	uint8_t                   	u8_sampletime;		 				/* AD时钟样本时间                 		eg:150                    		*/
	adc_trigger_t             	trigger;		 				    /* 期望的触发方式                 		eg:ADC_TRIGGER_SOFTWARE   		*/

	adc_pretrigger_sel_t      	pretriggerSel;		 				/* 要选择的预触发器源             		eg:ADC_PRETRIGGER_SEL_PDB 		*/
	bool                      	b_DMAEnFlag;		 				/* 新的DMA启用标志状态            		eg:false                  		*/
	adc_voltage_reference_t   	voltageRef;               			/* 新的电压参考输入               		eg:ADC_VOLTAGEREF_VREF    		*/
	bool                      	b_ConvFlag;		 				    /* 新的连续转换标志状态          		eg:false                  		*/
	bool                      	b_SupMonEnFlag;		 				/* 新的电源监视器启用标志状态 	eg:true                   		*/

	bool                      	b_CalActFlag;		 				/* 新的标定活动标志状态           		eg:true                   		*/
	adc_average_t             	AvrgMdl;		 						/* 新的硬件平均模式               		eg:ADC_AVERAGE_32        	 	*/
	bool                      	b_HwAveEnFlag;		 			/* 新的硬件平均启用标志状态       	eg:true                   		*/
	uint16_t					u16_value_Offset;									/*设置ADC偏移量 				eg:0	用于单片机底层基准校准			*/
}BSW_ADC_Cfg;

/********************************************************
**函数名：	
**功能：	  
**输入参数：
**返回值：	
**注意：		
*********************************************************/
void BSW_ADC_Config(BSW_ADC_Cfg  ADC_Cfg);

/********************************************************
**函数名：	BSW_ADC_StartConversion
**功能：		ADC启动转换
**输入参数：ADC_instance ADC转换源,ADC_CH ADC转换通道号
**返回值：	无
**注意：		
*********************************************************/
void BSW_ADC_StartConversion(BSW_ADC_Cfg  ADC_Cfg);

/********************************************************
**函数名：	BSW_ADC_GetValue
**功能：		获取ADC转换结果
**输入参数：ADC_instance ADC转换源,ADC_CH ADC转换通道号
**返回值：	转换结果(失败返回-1)
**注意：		
*********************************************************/
u16	BSW_ADC_GetValue(BSW_ADC_Cfg  ADC_Cfg);


typedef struct 
{
	ADC_Type*               Adc_base;
	adc_inputchannel_t      InputCh;    /*转换的通道       eg:ADC_INPUTCHAN_EXT4*/
	u8                      SIM_Ch_Select;    /*SIM模块 用来引脚ADC通道复用   eg:0x01*/
}Bsw_Adc_CovFlg;

/********************************************************
**函数名：	BSW_ADC_StartCov
**功能：		ADC启动转换
**输入参数：ADC_instance ADC转换源,ADC_CH ADC转换通道号
**返回值：	无
**注意：		
*********************************************************/
void BSW_ADC_StartCov(Bsw_Adc_CovFlg Adc_CovFlg);
#endif
